package com.sun.jdk.date.jdk8after;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

/**
 * with(TemporalAdjuster adjuster)
 *
 * 在上一节学习的with方法中学习了可以通过with方法修改日期时间对象中封装的数据，但是有一些时候可能会做一些复杂的操作，
 * 比如说将时间调整到下个周的周日，下一个工作日，或者本月中的某一天，这个时候可以使用调节器TemporalAdjuster来更方便的处理日期。
 *
 * with方法有一个重载形式，需要传入一个TemporalAdjuster对象，通过查看发现TemporalAdjuster是一个接口，那么实际上传入的是这个接口的实现类对象。
 *
 * 作者：一双看向未来的眼睛
 * 链接：https://www.jianshu.com/p/7a1b367ae95f
 * 来源：简书
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
public class Java8TimeClassMethodDemo3 {

    /**
     * with(TemporalAdjuster adjuster)的学习使用
     */
    private static void test1(){
        LocalDate now = LocalDate.now();
        System.out.println("当前时间："+now);

        // 将当前时间修改为当月的第一天
        LocalDate firstDayOfMonth = now.with(TemporalAdjusters.firstDayOfMonth());
        System.out.println("firstDayOfMonth = " + firstDayOfMonth);

        // 将当前时间修改为当月的最后一天
        LocalDate lastDayOfMonth = now.with(TemporalAdjusters.lastDayOfMonth());
        System.out.println("lastDayOfMonth = " + lastDayOfMonth);

        // 将当前时间修改为当年的第一天
        LocalDate firstDayOfYear = now.with(TemporalAdjusters.firstDayOfYear());
        System.out.println("firstDayOfYear = " + firstDayOfYear);

        // 将当前时间修改为当年的最后一天
        LocalDate lastDayOfYear = now.with(TemporalAdjusters.lastDayOfYear());
        System.out.println("lastDayOfYear = " + lastDayOfYear);


        /**
         *  DayOfWeek的使用，DayOfWeek主要是用来获取下一个或上一个周几的时间
         */

        // 将当前时间修改为下一个周日
        LocalDate nextSunday = now.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
        System.out.println("nextSunday = " + nextSunday);
        // 将当前时间修改为上一个周二
        LocalDate previousTuesday = now.with(TemporalAdjusters.previous(DayOfWeek.TUESDAY));
        System.out.println("previousTuesday = " + previousTuesday);

    }


    public static void main(String[] args) {
        test1();
        System.out.println("-----------");
    }
}
